angular.module('starter.services', [])

    //题库分类服务
    .factory('Category', ['$http', function ($http) {

        return {
            //获取分类下的子分类
            getChildren: function (pid, callback) {
                return $http({
                    method: 'POST',
                    url: '/category/subcategory',
                    params: {
                        pid: pid
                    }
                }).success(function (data) {
                    callback(data);
                });
            },

            //获取改分类下的题库
            getStores: function (categoryId, skip, limit, callback) {
                $http({
                    method: 'POST',
                    url: '/category/stores',
                    params: {
                        categoryId : categoryId,
                        skip: skip,
                        limit: limit
                    }
                }).success(function (data) {
                    callback(data);
                });
            }
        }
    }])

    //题库服务
    .factory('Store', ['$http', function ($http) {

        return {

            /**
             * 获取题库信息
             * @param storeId
             * @param callback
             */
            getById : function(storeId, callback){
                $http({
                    method : 'POST',
                    url : '/store/getById',
                    params : {
                        storeId : storeId
                    }
                }).success(function(data){
                    callback(data);
                });
            },

            //获取题库下未开始的对战
            getBattles: function (storeId, skip, limit, callback) {
                $http({
                    method: 'POST',
                    url: '/store/battles',
                    params: {
                        storeId : storeId,
                        skip: skip,
                        limit: limit
                    }
                }).success(function (data) {
                    callback(data);
                });
            },
            //获取我参与过的对战
            getMyBattles: function (skip, limit, callback) {
                $http({
                    method: 'POST',
                    url: '/store/mybattles',
                    params: {
                        skip: skip,
                        limit: limit
                    }
                }).success(function (data) {
                    callback(data);
                });
            }
        }
    }])

    //用户服务
    .factory('User', ['$http', function($http){
        return {
            get : function(userId, callback){
                $http({
                    method : 'POST',
                    url : '/user/'+userId
                }).success(callback);
            },

            setPhoto : function(userId, photo, callback){
                $http({
                    method : 'POST',
                    url : '/userSetPhoto',
                    params : {
                        userId : userId,
                        photo : photo
                    }
                }).success(callback);
            }
        };
    }])

    //对战信息
    .factory('Battle', ['$http', function ($http) {

        return {
            //创建一个对战
            newBattle : function(storeId, callback){
                $http({
                    method : 'POST',
                    url : '/battle/new',
                    params : {
                        userId : USERINFO.userId,
                        storeId : storeId
                    }
                }).success(callback);
            },

            //创建一个练习赛
            newPractice : function(storeId, callback){
                $http({
                    method : 'POST',
                    url : '/battle/practice/new',
                    params : {
                        userId : USERINFO.userId,
                        storeId : storeId
                    }
                }).success(callback);
            },

            //加入一场对战
            joinBattle : function(battleId, callback){
                $http({
                    method : 'POST',
                    url : '/battle/join',
                    params : {
                        userId : USERINFO.userId,
                        battleId : battleId
                    }
                }).success(callback);
            },

            //获取一个对战的信息
            get : function(battleId, callback){
                $http({
                    method : 'POST',
                    url : '/battle/'+battleId,
                    params : {
                        userId : USERINFO.userId
                    }
                }).success(callback);
            },

            //开始对战
            start : function(battleId, callback){
                $http({
                    method : 'POST',
                    url : '/battle/start/'+battleId,
                    params : {
                        userId : USERINFO.userId
                    }
                }).success(callback);
            },

            /**
             * 对战创建人对战结束，将对战情况存入数据库， 包括所有人的成绩，逃跑的人，参战人等
             * 对战用户信息不用存，每个用户在加入对战的时候已经存入了该信息
             * @param userId 用户ID
             * @param battleId  对战ID
             * @param fleeUsers 逃跑用户ID数组
             * @param allScores 所有人的对战成绩
             * @param allResults 对战创建人的对战答案 只含有对战人的答案，不包括其他人的
             * @param callback 回调方法
             */
            ownerStop : function(battleId, userId, fleeUsers, allScores, allResults, callback){
                $http({
                    method : 'POST',
                    url : '/battle/stop/owner',
                    params : {
                        battleId : battleId,
                        userId : userId,
                        fleeUsers : fleeUsers,
                        allScores : allScores,
                        allResults : allResults
                    }
                }).success(callback);
            },

            /**
             * 保存用户的对战答案
             * @param battleId 对战ID
             * @param userId 参战人的ID
             * @param myScore 我的得分
             * @param userResults 参战人的答案
             * @param callback 回调方法
             */
            userStop : function(battleId, userId, myScore, userResults, callback){
                $http({
                    method : 'POST',
                    url : '/battle/stop/user',
                    params : {
                        battleId : battleId,
                        userId : userId,
                        myScore : myScore,
                        userResults : userResults
                    }
                }).success(callback);
            },

            /**
             * 删除创建的对战
             * @param battleId
             * @param callback
             */
            delete : function(battleId, callback){
                $http({
                    method : 'POST',
                    url : '/battle/delete',
                    params : {
                        battleId : battleId
                    }
                }).success(callback);
            }
        }

    }])

    //练习服务
    .factory('Practice', ['$http', function($http){
        return {
            //获取练习服务数据
            get : function(practiceId, callback){
                $http({
                    method : 'POST',
                    url : '/battle/practice/' + practiceId,
                    params : {

                    }
                }).success(callback);
            },

            //开始对战
            start : function(practiceId, callback){
                $http({
                    method : 'POST',
                    url : '/battle/practice/start/'+practiceId
                }).success(callback);
            },

            /**
             * 结束练习
             * @param practiceId
             * @param myScore
             * @param myResults
             */
            stop : function(practiceId, userId, myScore, myResults, callback){
                $http({
                    method : 'POST',
                    url : '/battle/practice/stop/' + practiceId,
                    params : {
                        userId : userId,
                        myScore : myScore,
                        myResults : myResults
                    }
                }).success(callback);
            }
        };
    }])

    //试卷服务
    .factory('Paper', ['$http', function($http){
        return {
            get : function(paperId, callback){
                $http({
                    method : 'POST',
                    url : '/battle/paper/' + paperId
                }).success(callback);
            }
        }
    }])

    //荣誉榜服务
    .factory('Honor', ['$http', function($http){
        return {
            get : function(skip, limit, callback){
                $http({
                    method : 'POST',
                    url : '/honor',
                    params : {
                        skip : skip,
                        limit : limit
                    }
                }).success(callback);
            }
        }
    }])

    //挑战信
    .factory('Letter', ['$http', function($http){

        return {
            getInbox : function (skip, limit, callback) {

                $http({
                    url : '/letter/inbox',
                    method : 'POST',
                    params : {
                        userId : USERINFO.userId,
                        skip : skip,
                        limit : limit
                    }
                }).success(callback);
            },

            getOutbox : function(skip, limit, callback){

                $http({
                    url : '/letter/outbox',
                    method : 'POST',
                    params : {
                        userId : USERINFO.userId,
                        skip : skip,
                        limit : limit
                    }
                }).success(callback);
            },

            //发送挑战信
            send : function(userId, storeId, receivers, text, callback){
                $http({
                    url : '/letter/send',
                    method : 'POST',
                    params : {
                        userId : userId,
                        storeId : storeId,
                        receivers : receivers,
                        text : text
                    }
                }).success(callback);
            },

            /**
             * 根据用户名字查询用户
             * @param name
             * @param callback
             */
            queryUser : function(name, callback){
                $http({
                    url : '/letter/queryuser',
                    method : 'POST',
                    params : {
                        name : name
                    }
                }).success(callback);
            },

            //删除信件
            delete : function(letterId, callback){
                $http({
                    url : '/letter/delete',
                    method : 'POST',
                    params : {
                        letterId : letterId
                    }
                }).success(callback);
            }
        };

    }]);
